package com.youlu.campus.entity;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.youlu.campus.base.base.EntityBase;
import com.youlu.campus.base.certificate.enums.CertificateStatusEnum;
import com.youlu.campus.base.order.AddressInfo;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 用户&证书基础信息
 */
@JsonInclude(JsonInclude.Include.NON_NULL)
@Getter
@Setter
@Document(collection = "user_ca_info")
public class UserCaInfo extends EntityBase {
    /**
     * 证书信息
     */
    @Transient
    private CaInfo caInfo;
    /**
     * 用户ID
     */
    @Indexed
    private String userId;
    /**
     * 证书基础信息ID
     */
    @Indexed
    private String caInfoId;
    /**
     * 证书编号
     */
    @Indexed
    protected String certificateNo;

    /**
     * 证书名称
     */
    private String caName;
    /**
     * 批次号
     */
    @Indexed
    protected Long batchNo;
    /**
     * 订单号
     */
    @Indexed(unique = true)
    private String orderNo;
    /**
     * 父订单号
     */
    @Indexed
    private String parentOrderNo;
    /**
     * 状态,0:待付款,1:已付款,2:制作中,3:待发货,4:待收货,5:已收货,6:订单完成,7:订单关闭,8:售后中,9:退款中,10:待返货，11:返货中，12:退款完成
     */
    private Integer caStatus = 0;
    /**
     * 物流公司
     */
    private String logisticsCompany;
    /**
     * 物流编号
     */
    private String logisticsNo;
    /**
     * 获取来源,0:活动,1:会员,2:兼职,3:实习,4:其他
     */
    private Integer from;
    /**
     * 获取来源渠道ID,对应各个项目主体的ID，例如活动ID,购买会员的话对应会员购买的ID
     */
    private String channelId;
    /**
     * 大学名称
     */
    protected String universityName;
    /**
     * 姓名
     */
    @Indexed
    protected String name;
    /**
     * 邮箱
     */
    protected String email;
    /**
     * 手机号
     */
    protected String mobile;
    /**
     * 盖章状态
     */
    protected String status = CertificateStatusEnum.STAMPING.getCode();
    /**
     * 盖章时间
     */
    protected Date stampTime;
    /**
     * 证书基础图片
     */
    protected String certificateImage;
    /**
     * 证书生成后的图片
     */
    protected String certificateFinalImage;
    /**
     * 盖章图片
     */
    protected String stampImage;
    /**
     * 是否已经领取过
     */
    protected boolean received;
    /**
     * 领取时间
     */
    protected Date receiveTime;
    /**
     * 证书生成时间
     */
    protected Date generateTime;
    /**
     * 证书类型
     */
    protected String certificateType;


    /**
     * 支付时间
     */
    protected Date payTime;
    /**
     * 是否已经同步到盖章系统
     */
    protected boolean sync;
    /**
     * 同步结果
     */
    protected String syncResult;
    /**
     * 证书材质,0:电子,1:纸质
     */
    @Indexed
    protected Integer material = 0;
    /**
     * 地址信息
     */
    protected AddressInfo addressInfo;
    /**
     * TransactionId
     */
    protected String transactionId;
    /**
     * 支付描述
     */
    protected String payDesc;
    /**
     * 客服端IP
     */
    protected String clientIp;

    protected String goodsCode;
    /**
     * 类型,0:会员支付,1:现金支付,2:国青币支付
     */
    protected String payFeeType = "0";
    /**
     * 价格，价格
     */
    protected Integer price;
    /**
     * 原始价格
     */
    protected Integer originalPrice;
    /**
     * 邮政编码
     */
    protected String postcode;

    /**
     * 省
     */
    protected String province;

    /**
     * 市
     */
    protected String city;

    /**
     * 区
     */
    protected String area;

    /**
     * 地址
     */
    protected String address;
    /**
     * 订单提示
     */
    protected String tips = "....";
    /**
     * 退款时间
     */
    protected Date refundTime;
    /**
     * 退款金额
     */
    protected Integer refundFee;
    /**
     * 退款说明
     */
    protected String refundDesc;
    /**
     * 大学ID
     */
    protected String universityId;
    /**
     * 活动 ID
     */
    protected String activityId;
    /**
     * 业务名称:例如活动名
     */
    protected String bizName;
    /**
     * 审核状态 0: 无需要审核,1:待审核,2:审核通过,3:审核拒绝
     */
    private Integer verifyStatus;
    /**
     * 标签
     */
    private List<String> tags = new ArrayList<String>();
    /**
     * 标签搜索字段
     */
    private String tagsSearchStr;
    /**
     * 发货时间
     */
    private Date shippingTime;
    /**
     * 退款ID
     */
    private String refundId;
    /**
     * 平台,qq,wechat,wechat-h5,h5
     */
    private String platform = "qq";

    /**
     * url
     */
    private String url;
    /**
     * 材质显示字段
     */
    private String materialStr;

}
